//
// Created by Administrator on 2021/5/5.
//

/*
给你一个单链表的引用结点head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。

请你返回该链表所表示数字的 十进制值 。


示例 1：



输入：head = [1,0,1]
输出：5
解释：二进制数 (101) 转化为十进制数 (5)
示例 2：

输入：head = [0]
输出：0
示例 3：

输入：head = [1]
输出：1
示例 4：

输入：head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]
输出：18880
示例 5：

输入：head = [0,0]
输出：0


提示：

链表不为空。
链表的结点总数不超过30。
每个结点的值不是0 就是 1

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。*/

#include <iostream>

using namespace std;

//Definition for singly-linked list.
struct ListNode {
    int val;
    ListNode *next;

    ListNode(int x) : val(x), next(nullptr) {}
};

class Solution {
public:
    int getDecimalValue(ListNode *head) {
        int sum = 0;
        while (head) {
            sum = sum * 2 + head->val;
            head = head->next;
        }
        return sum;
    }
};

int main() {
    ListNode n1{1}, n2{0}, n3{1};
    n1.next = &n2;
    n2.next = &n3;
    Solution sol;
    cout << sol.getDecimalValue(&n1) << endl;
    return 0;
}
